Protecting computer memory is critical in program security because most of the security breaches related to programs start with compromising memory. Specifically, adversaries can disclose or divert control-flow by overwriting a code pointer. As mitigation of the vulnerability, researchers have developed the methods for the obfuscation of code pointers and monitoring integrity of control-flow. Obfuscation hides critical information by randomizing memory contents and the locations of program components. Among the methods of obfuscation for code pointers, encryption has been successful in its effectiveness and cost. Since decryption should precede dereferencing an encrypted pointer, an adversary cannot compromise the pointer to get what they want without knowing how to decrypt the pointer.
However, the effectiveness of code pointer encryption diminishes significantly if the state of encryption stays fixed during program execution because writable memory is not free from information leaks as demonstrated in new offensive arts, for example, incremental brute-force memory reading, crash-resistance, and side-channel analysis. Disclosed control-flow information is useful for crafting exploits of control-flow interception and another information leak. It does not matter whether the pointers are encrypted or not. Though it may take considerable time, an attacker may still be able to break the encryption using various available runtime data. Even worse, an adversary can launch a code reuse attack by overwriting an encrypted code pointer with another disclosed if the two pointers share a key.